package inputstream_;

import org.junit.jupiter.api.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * @author DCSGO
 * @version 1.0
 * FileInputStream 文件字节输入流
 */
@SuppressWarnings({"all"})
public class FileInputStream_ {
    /**
     * 要求: 请使用 FileInputStream 读取 hello.txt 文件
     * 并将文件内容显示到控制台 使用 read()
     * 效率较低
     */
    @Test
    public void input1() {
        String filePath = "C:\\Users\\Administrator\\Desktop\\Javacode\\java-learning-code\\chapter19\\src\\inputstream_\\hello.txt";
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(filePath);
            int input;
            //read() 从文件中读取一个字节的数据 并返回 读取到文件末尾返回 -1 (返回类型为int)
            while ((input = fileInputStream.read()) != -1) {
                System.out.print((char) input);
            }//Hello world!
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //关闭输入流 释放资源
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 使用 read(byte b[]) 效率得到了一定的提升
     */
    @Test
    public void input2() {
        String filePath = "C:\\Users\\Administrator\\Desktop\\Javacode\\java-learning-code\\chapter19\\src\\inputstream_\\hello.txt";
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(filePath);
            byte[] inputs = new byte[8];
            int inputsLen;
            //read(byte b[]) 从文件中读取一组字节数据 并存放到 b[] 中
            //返回实际读取到的字节大小(数据个数) 读取到文件末尾返回 -1 (返回类型为int)
            while ((inputsLen = fileInputStream.read(inputs)) != -1) {
                System.out.print(new String(inputs, 0, inputsLen));
            }//Hello world!
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //关闭输入流 释放资源
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
